package xx.services.entity.inter;

import javax.ws.rs.FormParam;
import javax.ws.rs.PathParam;
import javax.ws.rs.DefaultValue;

public interface IDatumInterface
{
    /**
     * 描述：获取实体的档案，包含扩展属性. <br>
     * 1.获取entity_id对应的所有档案 <br>
     * 2.获取entity_id下指定分类({type_id|keyword})对应的档案属性。 输入： 输出：档案JSON数据 [ { detail_id, entity_id, type_id,
     * rule, error, single, keyword, [ { value_id, attribute_id, title, value, rule, error,
     * datatype, opvalue } ] } ]
     * 
     * @GET
     * @Path("/{entity_id}")<br>
     * @param entityId
     * @return
     * @author dengjinye,2011-2-21
     */

    public String getDatum(@PathParam("entity_id")
    long entityId);

    /**
     * 描述：获取实体的档案 <br>
     * 1.获取entity_id对应的所有档案 <br>
     * 2.获取entity_id下指定分类({type_id|keyword})对应的档案属性。 输入： 输出：档案JSON数据 [ { detail_id, entity_id, type_id,
     * rule, error, single, keyword, [ { value_id, attribute_id, title, value, rule, error,
     * datatype, opvalue } ] } ]
     * 
     * @GET
     * @Path("/{entity_id}/@type/{type_id}")<br>
     * 
     * @param entityId
     * @param typeId
     *            有两种可能值：type_id,keyword
     * @return
     * @author dengjinye,2011-2-21
     */
    public String getDatumByTypeId(@PathParam("entity_id")
    long entityId, @DefaultValue("")
    @PathParam("type_id")
    String typeId);

    /**
     * 描述：更新实体对应的属性值.<br>
     * 1.value json 属性值JSON数据，格式如下： <br>
     * [{value_id:number,value:string}]<br>
     * 
     * @PUT
     * @Path("/{entity_id}")<br>
     * @param entityId
     * @return
     * @author dengjinye,2011-2-21
     */
    public String updateDatum(@PathParam("entity_id")
    long entityId, @FormParam("value")
    String value);

    /**
     * 描述：获取系统定义的档案属性分类列表，目的是为了提供给用户选用，单一（single）分类不能重复选用。 <br>
     * 输入：<br>
     * 输出：档案属性分类JSON数据，格式如下： <br>
     * [{type_id,keyword,name,rule,error,single}]
     * 
     * @GET
     * @Path("/{entity_id}/type")<br>
     * @param entityId
     * @return
     * @author dengjinye,2011-2-21
     */
    public String getType(@PathParam("entity_id")
    long entityId);

    /**
     * 描述：获取系统定义的档案属性分类下的属性定义，目的是为了提供给用户选用。<br>
     * 输入：<br>
     * 输出：档案属性分类JSON数据，格式如下： <br>
     * [{attribute_id,type_id,title,rule,error,datatype,opvalue}]
     * 
     * @GET
     * @Path("/{entity_id}/type/{type_id}")<br>
     * @param entityId
     * @return
     * @author dengjinye,2011-2-21
     */
    public String getTypeByTypeId(@PathParam("entity_id")
    long entityId, @PathParam("type_id")
    String typeId);

    /**
     * 描述：通过分类ID或关键字来选用,多个type_id或keyword间用下划线“_”隔开 <br>
     * 输入：<br>
     * 输出：true成功，false失败
     * 
     * @POST
     * @Path("/{entity_id}/type/{type_id}")<br>
     * @param entityId
     * @param typeId
     *            有两种可能：type_id,keyword
     * @param value
     *            扩展属性detail_value的值，json格式
     *            eg:[{'type_id':'1','detail_value':[{'title':'档案编号','value':'12','attribute_id':'1'},{'title':'项目编号','value':'12','attribute_id':'2'}]}]
     * @return
     * @author dengjinye,2011-2-22
     */
    public String addByTypeId(@PathParam("entity_id")
    long entityId, @PathParam("type_id")
    String typeId,@FormParam("value")
    String value);

    /**
     * 描述：通过分类ID或关键字来删除,多个type_id或keyword间用下划线“_”隔开 <br>
     * 输入：<br>
     * 输出：true成功，false失败
     * 
     * @DELETE
     * @Path("/{entity_id}/type/{type_id}")<br>
     * @param entityId
     * @param typeId
     *            有两种可能：type_id,keyword
     * @return
     * @author dengjinye,2011-2-21
     */
    public String deleteByTypeId(@PathParam("entity_id")
    long entityId, @PathParam("type_id")
    String typeId);
}
